package org.genew.squadra.xml.model;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;

import org.genew.squadra.xml.common.CustomComparator;
import org.springframework.web.multipart.commons.CommonsMultipartFile;

public class OrdinamentoXHTML {

	private List<FileXHTML> filesXHTML = new ArrayList<FileXHTML>();

	public List<FileXHTML> getFilesXHTML() {
		return filesXHTML;
	}

	public void setFilesXHTML(List<FileXHTML> filesXHTML) {
		this.filesXHTML = filesXHTML;
	}
	//Genera si occupa di fare la trasformazione da CommonsMultipartFile[] a List<FileXHTML>
	public void genera(CommonsMultipartFile[] filesXHTML){
		
		CommonsMultipartFile[] a = filesXHTML;
		
		for(int i=0; i<a.length;i++){
			
			String tempIndentazione = this.estraiIndentazione(a[i].getOriginalFilename());
			FileXHTML temp = new FileXHTML(i,a[i].getOriginalFilename(),tempIndentazione);
			temp.setIndentazione(tempIndentazione);
			byte[] tempByte = a[i].getBytes();
			//System.out.println("BYTE =   = " + tempByte.toString());
			temp.setBytes(tempByte);
			//System.out.println("----START---");
			
			//System.out.println("temp indentazione -> " + tempIndentazione);
			//System.out.println("Generato da CommonsMultiPartFile -> "+a[i].getOriginalFilename());
			this.filesXHTML.add(temp);
			//System.out.println("----END---");
		}
		//System.out.println("SIZE"+this.filesXHTML.size());
		//this.setNewName();
		printAll();
	
	}

	private void printAll() {
		for(int i=0;i<this.filesXHTML.size();i++){
			System.out.println("FILE NAME= "+this.filesXHTML.get(i).getOriginalFileName() + " ORDER = "+this.filesXHTML.get(i).getOrdine());
		}
		
	}
	
	//Ordina i file in base al campo ordine 
	public void setNewOrder() {
		Iterator i = filesXHTML.iterator();
		Collections.sort(filesXHTML,new CustomComparator());
		//System.out.println("--------Nuovo Ordine COMPARE--------");
		while(i.hasNext()){
			FileXHTML temp = (FileXHTML) i.next();
			//System.out.println("New Order = " + temp.getOrdine());
			//System.out.println("Old Name = " + temp.getOriginalFileName());
			
		}
		//System.out.println("--------Nuovo Ordine COMPARE--------");
	} 
	
	public String estraiIndentazione(String a){
		
		int indicePunto  = a.indexOf(".");
		String indentazione = a.substring(0, indicePunto);
		
		
		return indentazione;
	}
	//Cambia il valore del campo OriginalFileName, con una stringa sequenziale che parte da cp000 fino alla fine del file
	//NB da usare solo prima di scrivere i file sull'hardisk
	public void setNewName(){
		Iterator<FileXHTML> i = filesXHTML.iterator();
		List<FileXHTML> nuova = new ArrayList<FileXHTML>();
		while(i.hasNext()){
			FileXHTML temp = (FileXHTML) i.next();
			
			String tempOrginalFile = "cp00".concat(Integer.toString(temp.getOrdine())).concat(".xhtml");
			//System.out.println("TEMPORIGINALFILENAME ==> " + tempOrginalFile);
			temp.setOriginalFileName(tempOrginalFile);
			nuova.add(temp);
		}
		this.filesXHTML = nuova;
	}
	
	//nuova modifica
	public void keepTrackByte(List<FileXHTML> nuovaLista){
		//prendo l'iteratore dalla lista vecchia
		Iterator<FileXHTML> i = filesXHTML.iterator();
		//creo una nuova lista dove inserire i nuovi fileXHTML Ordinati E con i Byte
		List<FileXHTML> newList = new ArrayList<FileXHTML>();
		
		while(i.hasNext()){
  		    //FILE OLD
			FileXHTML temp = i.next();
			//Prende il nome dei file della vecchia lista
			String orginalFN = temp.getOriginalFileName(); 
				//creo iteratore per ciclare e fare confronti con la nuova lista ordinata
				Iterator<FileXHTML> tempIterator = nuovaLista.iterator();
				while(tempIterator.hasNext()){
					FileXHTML tempTwo = tempIterator.next(); //NEW
					//Controllo se i nomifile originali corrispondono
					if(tempTwo.getOriginalFileName().equals(orginalFN)){
						//se corrispondono assegno i vecchi byte
						tempTwo.setBytes(temp.getBytes());
						newList.add(tempTwo);
						break;						
					}
				}
			
		}
		this.filesXHTML = newList;
		this.setNewOrder();
		this.setNewName();
	}
}
